/*
定义顺序表 list 的结构体，包含一个数组和一个整数，数组用来存储元素，整数用来记录当前元素个数。
以及相关的操作函数，包括初始化、插入、查找等。
*/
#include <iostream>
using namespace std;

typedef int ElementType;
typedef struct List List;
struct List {
    ElementType *data;
    int size;
    int capacity;
};

// 初始化顺序表
List *init(int capacity) {
    List *list = new List;
    list->data = new ElementType[capacity];
    list->size = 0;
    list->capacity = capacity;
    return list;
}

// 在顺序表的第 i 个位置插入元素 x
void insert(List *list, int i, ElementType x) {
    if (list->size >= list->capacity) {
        return;
    }
    for (int j = list->size; j >= i; --j) {
        list->data[j] = list->data[j - 1];
    }
    list->data[i - 1] = x;
    ++list->size;
}

// 删除顺序表的第 i 个位置的元素
void remove(List *list, int i) {
    if (i < 1 || i > list->size) {
        return;
    }
    for (int j = i; j < list->size; ++j) {
        list->data[j - 1] = list->data[j];
    }
    --list->size;
}

// 查找元素 x 在顺序表中的位置
int find(List *list, ElementType x) {
    for (int i = 0; i < list->size; ++i) {
        if (list->data[i] == x) {
            return i;
        }
    }
    return -1;
}

// 输入顺序表
void input(List *list, int n) {
    for (int i = 0; i < n; ++i) {
        cin >> list->data[i];
    }
    list->size = n;
}

// 输出顺序表
void print(List *list) {
    for (int i = 0; i < list->size; ++i) {
        cout << list->data[i] << " ";
    }
    cout << endl;
}

// 释放顺序表
void freeList(List *list) {
    delete[] list->data;
    delete list;
}